package main

import "fmt"

func main() {
	//定义切片（自动扩容数组）
	slice := []int{1, 2, 3, 4}
	//slice的类型是：[]int
	fmt.Printf("slice的类型是：%T\n", slice)

	//内置函数定义切片
	slice2 := make([]int, 3, 8)
	//slice2的类型是：[]int，长度是：3，容量是：8
	fmt.Printf("slice2的类型是：%T，长度是：%d，容量是：%d\n", slice2, len(slice2), cap(slice2))

	//slice原地址：0xc000020020
	fmt.Printf("slice原地址：%p\n", slice)
	//添加元素
	slice = append(slice, slice2...)
	//[1 2 3 4 0 0 0]
	fmt.Println(slice)
	//slice新地址：0xc00001c080
	fmt.Printf("slice新地址：%p\n", slice)

	//已有数组创建切片
	arr := [3]int{1, 2, 3}
	//左闭区间 右开区间
	slice3 := arr[0:3]
	//[1 2 3]
	fmt.Println(slice3)

	//容量从起始索引到结束 0:3容量：3 1:3容量：2
	fmt.Printf("0:3容量：%d 1:3容量：%d\n", cap(arr[0:3]), cap(arr[1:]))

	//更改原始数组会变更切片 反之亦然
	arr[0] = 4
	fmt.Println(slice3)
}
